#include<stdio.h>
#include<stdlib.h>

// C语言递归入门 https://www.bilibili.com/video/BV1Nx411D712/

// 递归生成从2开始的偶数数列
int fn1(int n){
    if(n == 2)
    {
        // 递归出口，第1项值为2
        return 2;
    }
    // fbn(n) = fbn(n-1) + 2; 当前项=前1项+2
    return fn1(n-1) + 2;
}

// 递归生成从1开始的奇数数列
int fn2(int n){
    if(n == 1) 
    {
        // 递归出口，第1项值为1
        return 1;
    }
    // fbn(n) = fbn(n-1) + 2; 当前项=前1项+2
    return fn2(n-1) + 2;
}

// 生成从1开始的奇数数列
int fn3(int n){
    if(n == 1) 
    {
        // 递归出口，第1项值为1
        return 1;
    }
    return fn3(n-1) + 1;
    // 如果是+n就是递增序列求和
    // return fn3(n-1) + n; 
}


// 递归生成斐波那契数列  1 1 2 3 5 8 13 21
int fbn(int n){
    if(n == 1 || n == 2)
    {
        // 递归出口，第1项和第2项的值
        return 1;
    }
    // fbn(n) = fbn(n-1) + fbn(n-2); 当前项=当前第1项+当前第2项
    return fbn(n-1) + fbn(n-2);
}

// 递归求解数组的前n项和
int sum(int arr[], int n ){
    if (n == 0)
    {
        return arr[0];
    }
    return sum(arr, n-1) + arr[n];
}

// 求解数组的前n项的最大值
int max(int arr[], int n ){
    if (n == 0)
    {
        return arr[0];
    }
    if (max(arr, n-1) > arr[n])
    {
        return max(arr, n-1);
    }
    return arr[n];
}


int main(){
    // printf("%d\n", fn3(1));
    // printf("%d\n", fn3(2));
    // printf("%d\n", fn3(3));
    // printf("%d\n", fn3(4));

    int arr[10] = {1, 10, 30, 9, 100};
    int num = sum(arr, 4);
    printf("arr数组的和为：%d\n", num);
    printf("arr数组的最大值为：%d\n", max(arr, 4));
}